/*
 * Copyright (c) 2012-2013 Open Source Community - <http://www.peerfact.org>
 * Copyright (c) 2011-2012 University of Paderborn - UPB
 * Copyright (c) 2005-2011 KOM - Multimedia Communications Lab
 *
 * This file is part of PeerfactSim.KOM.
 * 
 * PeerfactSim.KOM is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * any later version.
 * 
 * PeerfactSim.KOM is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with PeerfactSim.KOM.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

package org.peerfact.impl.overlay.dht.pastry.parallel.components;

import org.peerfact.api.common.Component;
import org.peerfact.api.common.ComponentFactory;
import org.peerfact.api.common.Host;

/**
 * 
 * @author <info@peerfact.org>
 * @version 05/06/2011
 * 
 */
public class PastryNodeFactory implements ComponentFactory {

	// variables by Martin Wiegand
	private int maxRedundance = 1;

	private boolean rowBucketsize = false;

	private boolean exponentialShrink = false;

	private boolean iterative = false;

	private int parallelLookups = 1;

	private boolean resplit = false;

	private boolean diversityFirst = false;

	@Override
	public Component createComponent(Host host) {
		PastryNode node = new PastryNode(host.getTransLayer(), maxRedundance,
				rowBucketsize, exponentialShrink, diversityFirst, iterative,
				parallelLookups, resplit);
		return node;
	}

	// Setters by Martin Wiegand.
	public void setMaxRedundance(int value) {
		if (value >= 0) {
			this.maxRedundance = value;
		}
	}

	public void setRowBucketsize(boolean value) {
		this.rowBucketsize = value;
	}

	public void setExponentialShrink(boolean value) {
		this.exponentialShrink = value;
	}

	public void setDiversityFirst(boolean value) {
		this.diversityFirst = value;
	}

	public void setIterative(boolean value) {
		this.iterative = value;
	}

	public void setParallel(int value) {
		if (value >= 0) {
			this.parallelLookups = value;
		}
	}

	public void setResplit(boolean value) {
		this.resplit = value;
	}

}
